/* 
 * File:   Octree.h
 * Author: Luis
 *
 * Created on 26 de Abril de 2011, 07:15
 */

#ifndef _OCTREE_H
#define	_OCTREE_H

#include "Ponto.h"


class Octree {
public:
    #define tamanhoMAX 100000

    /**
     * Estrutura de um nó não folha, ou seja, um nó interno
     * contém oito ponteiros que apontam para outros nós
     */
    typedef struct nodo arv;

    struct nodo{
        arv *ram01;
        arv *ram02;
        arv *ram03;
        arv *ram04;
        arv *ram05;
        arv *ram06;
        arv *ram07;
        arv *ram08;
    };

    /**
     * define quantos valores caberão em uma folha
     */
    #define numBucket 50

    /**
       *Estrutra do nó folha
       * para acessar valor para ser escrito no arquivo de saída
       * nome.p[indice].x ou y ou z ou cc ou conf
    */

    struct noFolha{
        Ponto p[numBucket];//vetor de objetos do tipo Ponto
    };


    Octree();
    Octree(const Octree& orig);
    virtual ~Octree();
    void Insercao(Ponto *p);
    void setThreshold(float threshold);
    int calculoNiveis();
    void remove();
    void VarreArvore();
    int VerificaVazia(arv *a);
private:
    /*Variável passada pelo usuário
     */
    float threshold;
    
};

#endif	/* _OCTREE_H */

